package com.dzxy.modal;

import com.dzxy.bean.UserBean;
import com.dzxy.dao.DBProvider;
import com.dzxy.utils.MyUtils;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.util.ArrayList;
import java.util.List;

public class UserInfoModal {
    /**
     * 用户信息新增
     *
     * @param userB 参数实体类
     * @return 操作结果记录条数
     */
    public int addUserInfo(UserBean userB) {
        // 默认返回值
        int i = 0;
        // 编写用户信息新增的Sql语句
        String strSql = "INSERT INTO userinfo(userName,userPsw,userAddress,userTel,userRegDate) VALUES(?,?,?,?,?)";
        // 创建参数数组:注意参数数组的顺序需要insert语句中的字段顺序保持一致
        // 该问题由 Mybatis解决
        Object[] objParams = {userB.getUserName(), userB.getUserPsw(), userB.getUserAddress(), userB.getUserTel(),
                MyUtils.convertDate2String(userB.getUserRegDate(), "yyyy-MM-dd HH:mm:ss")};
        // 执行新增操作语句
        i = DBProvider.update(strSql, objParams);
        return i;
    }

    /**
     * 查询所有的用户信息
     *
     * @param desc 是否倒序排列【true：倒序；false：正序】
     * @return 查询结果集
     */
    public List<UserBean> getAllUserInfo(boolean desc) {
        // 用户信息查询的Sql语句
        String strSql = "SELECT * FROM userinfo ";
        // 是否倒序排列
        strSql = desc ? strSql + "  ORDER BY userId DESC" : strSql;
        // 获取查询结果
        List<UserBean> list = DBProvider.query(strSql, new BeanListHandler<>(UserBean.class));
        // 返回值
        return list;
    }

    /**
     * 根据查询条件查询用户信息
     *
     * @param userB 查询条件参数实体类
     * @return 查询结果集
     */
    public List<UserBean> getUserInfoByParams(UserBean userB) {
        // 用户信息查询的Sql语句
        /*
        SELECT * FROM userinfo WHERE 1=1 AND userName like '%user%' AND userAddress like '%青%' AND userTel like '%13%'
AND userRegDate >= '2020-04-09' AND userRegDate <= '2020-04-10'
         */
        String strSql = " SELECT * FROM userinfo WHERE 1=1 ";
        // 动态查询sql语句的条件参数List
        List<Object> lstParams = new ArrayList<>();
        // 查询条件的动态拼接处理
        // 如果有用户名信息，则使用用户名进行模糊查询
        if (userB != null && userB.getUserName() !=null && !userB.getUserName().equals("")) {
            strSql += " AND userName like ? ";
            // 将参数加入参数集合list中
            lstParams.add("%" + userB.getUserName() + "%");
        }


        // 地址
        if (userB != null && userB.getUserAddress() != null && !userB.getUserAddress().equals("")) {
            strSql += " AND userAddress like ? ";
            // 将参数加入参数集合list中
            lstParams.add("%" + userB.getUserAddress() + "%");
        }

        // 电话
        if (userB != null && userB.getUserTel() != null && !userB.getUserTel().equals("")) {
            strSql += " AND userTel like ? ";
            // 将参数加入参数集合list中
            lstParams.add("%" + userB.getUserTel() + "%");
        }

        // 注册日期开始时间
        if (userB != null && userB.getUserRegDate() != null) {
            strSql += " AND userRegDate >= ? ";
            // 将参数加入参数集合list中
            lstParams.add(MyUtils.convertDate2String(userB.getUserRegDate(), "yyyy-MM-dd HH:mm:ss"));
        }

        // 注册日期结束时间
        if (userB != null && userB.getUserRegDate2() != null) {
            strSql += " AND userRegDate <= ? ";
            // 将参数加入参数集合list中
            lstParams.add(MyUtils.convertDate2String(userB.getUserRegDate2(), "yyyy-MM-dd HH:mm:ss"));
        }

        // 倒序排列
        strSql += "  ORDER BY userId DESC";
        // 获取查询结果
        List<UserBean> list = DBProvider.query(strSql, new BeanListHandler<>(UserBean.class), lstParams.toArray());
        // 返回值
        return list;
    }
}